import faqApi from '@/api/modules/faq';
import { useFAQStore } from '@/store';

/**
 * FAQ服务 - 处理FAQ相关的业务逻辑和API调用
 */
class FAQService {
  constructor() {
    this.faqStore = useFAQStore();
  }

  /**
   * 获取所有FAQ列表
   * @returns {Promise<Array>} FAQ列表
   */
  async getAllFAQs() {
    try {
      // 如果store中已有数据，直接返回
      if (this.faqStore.hasFAQs) {
        return this.faqStore.getAllFAQs;
      }

      this.faqStore.setLoading(true);
      const response = await faqApi.getAll();
      const faqs = response;
      // 将数据存储到store中
      this.faqStore.setFAQs(faqs);
      
      return faqs;
    } catch (error) {
      throw error;
    } finally {
      this.faqStore.setLoading(false);
    }
  }

  /**
   * 根据分类获取FAQ列表
   * @param {Number} category 分类（0-贷款，1-还款，2-账户，3-其他）
   * @returns {Promise<Array>} FAQ列表
   */
  async getFAQsByCategory(category) {
    try {
      // 如果store中已有该分类的数据，直接返回
      if (this.faqStore.hasFAQsForCategory(category)) {
        return this.faqStore.getFAQsByCategory(category);
      }

      this.faqStore.setLoading(true);
      const response = await faqApi.getByCategory(category);
      const faqs = response;
      
      // 将数据存储到store中
      this.faqStore.setFAQsByCategory(category, faqs);
      
      return faqs;
    } catch (error) {
      console.error('获取分类FAQ列表失败:', error);
      this.faqStore.setError(error.message || '获取分类FAQ列表失败');
      throw error;
    } finally {
      this.faqStore.setLoading(false);
    }
  }

  /**
   * 获取FAQ详情
   * @param {Number} id FAQ ID
   * @returns {Promise<Object>} FAQ详情
   */
  async getFAQDetail(id) {
    try {
      return await faqApi.getDetail(id);
    } catch (error) {
      throw error;
    }
  }

  /**
   * 获取分类名称
   * @param {Number} category 分类代码
   * @returns {String} 分类名称
   */
  getCategoryName(category) {
    const categoryMap = {
      0: '贷款',
      1: '还款',
      2: '账户',
      3: '其他'
    };
    return categoryMap[category] || '其他';
  }

  /**
   * 获取所有分类
   * @returns {Array} 分类列表
   */
  getAllCategories() {
    return [
      { value: 0, label: '贷款' },
      { value: 1, label: '还款' },
      { value: 2, label: '账户' },
      { value: 3, label: '其他' }
    ];
  }
}

// 导出单例
export default new FAQService();